package com.itec.learn.java.design.factory.nomethod;

import com.itec.learn.java.design.factory.Pizza;
import com.itec.learn.java.design.factory.simple.SimplePizzaFactory;

/**
 *
 * @author chenyiqun
 */
public class PizzaStore {
    AbstractPizzaFactory factory;

    public PizzaStore(AbstractPizzaFactory factory){
        this.factory = factory;
    }

    /**
     * 这里披萨创建的过程和制作过程还是耦合的
     * @param type
     * @return
     */
    public Pizza orderPizza(String type){
        //“创建过程”
        Pizza pizza = factory.createPizza(type);

        //“制作过程”
        //虽然不同的加盟店使用指定的工厂类生产披萨，但是下面的这些步骤可以被加盟店更改
        //如果我们需要约束这些行为（标准化流程），就需要使用工厂方法模式，创建一套框架，将这些行为固定起来
        //同时为了保持弹性，把创建披萨的方法抽象出来，留给子类（加盟店）去实现！见"method"包的实现
        pizza.prepare();
        pizza.bake();
        //pizza.cut(); 某加盟店不切片！
        pizza.box();

        return pizza;
    }
}
